package com.metaverse.backend.service;

import com.metaverse.backend.douyin.PlayerDataDTO;
import com.metaverse.backend.douyin.RoomDataDTO;
import com.metaverse.backend.dto.PlayerScoreDTO;
import com.metaverse.backend.dto.RoomProgressUpdateDTO;

import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.List;


/**
 *
 * 房间数据管理
 *
 */
public interface RoomDataManage {


    /**
     * redis缓存时长
     */
    long REDIS_CACHE_TIMEOUT = 3850;

    /**
     * 版本v1
     */
    String LIMIT_VERSION_V1 = "0.0.0";


    /**
     * 是否支持游戏版本
     *
     * @param gameVersion
     * @return
     */
    boolean supportVersion(String gameVersion);



    /**
     * 接收抖音推送数据按照房间丢到redis
     * @param roomId
     * @param reqData
     */
    void pushMsg(String roomId, String reqData, String msg_type);

    /**
     * 获取房间数据
     * @param roomId
     * @return
     */
    @Nullable
    RoomDataDTO getRoomDataDTO(String roomId, String roundId);



    /**
     * 更新进度
     * @param roomId
     * @return
     */
    RoomDataDTO updateRoomDataProgress(String roomId,List<RoomProgressUpdateDTO> roomProgressUpdateDTOList);

    /**
     * 结束游戏
     *
     * @param roomId
     * @return
     */
    RoomDataDTO endGame(String roomId);

    /**
     * 取抖音推送数据
     * @return
     */
    void appendChangedMsgData(RoomDataDTO roomDataDTO);

    /**
     * 获取直播本局间所有数据  断线重连用
     * @param roomId
     * @return
     */
    List<PlayerDataDTO> getAllPlayerData(String roomId);


    /**
     * 获取本局排行数据
     * @param roomId
     */
    List<PlayerDataDTO> sortAndGetRankList(String roomId,RoomDataDTO roomDataDTO);


    /**
     * 持久化玩家数据
     * @param roomId
     */
    void persistPlayerData(String roomId);


    /**
     * 玩家数量变化
     * @param openid
     * @param ballCount
     */
    void getPlayerVariation(String openid, int ballCount,String roomId,String roundId);

}
